#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;
//用一个类对象的特性以及vector来实现词频统计

//先建立一个结构体，这个结构体只是vecotr的一个存储单位
struct Record{
    Record(int frequent,string word)
        :_frequent(frequent)
         ,_word(word)
    {

    }
    int _frequent;
    string _word;
};
class Dictionary{
public:
    //让词典提前预留好空间
    Dictionary(int volomn){
        _dict.reserve(volomn);
    }
    //开始充传入的文件读取信息
    void read(const  string & filename){
        ifstream ifs(filename);
        if(!ifs){
            return;
        }
        string line;
        while(getline(ifs,line)){
            //把读取到的每一行数据给存到字符串里面，然后从字符串解析到string word
            istringstream iss(line);
            string word;

            while(iss>>word){
                if(is_alpha(word)){
                int i=0;
                //一个一个单词比较，比较到了就加1，没比到就设置成1
                for(;i<_dict.size();++i){
                    if(word==_dict[i]._word){
                        ++_dict[i]._frequent;
                        break;
                    }
                }
                //如果跟词典里面的单词全部比较完了，都没有，那就直接加上
                if(i==_dict.size()){
                    _dict.push_back(Record(1,word));
                }
            }
        }
    }
}
    void store(const string & filename){
        ofstream ofs(filename);
        for(auto &ele :_dict){
            ofs<<ele._word<<" "<<ele._frequent<<endl;
        }
    }
    private:
    bool is_alpha(const  string& word){
        auto it1=word.begin();
        auto it2=word.end();
        while(it1!=it2){
            if(!isalpha(*it1)){
                return false;
            }
            ++it1;
        }
        return true;
    }
        vector<Record> _dict;
    };

    void test(){
        Dictionary dic(30000);
        dic.read("The_Holy_Bible.txt");
        dic.store("2.txt");
    }
    int main(int argc, char * argv[]){
        test();
        return 0;
    }

